package com.example.laixunlong.control;

import android.Manifest;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;

import com.example.laixunlong.R;

/*此处设置通知控件*/
public class Notification_tongzhi extends AppCompatActivity
{
    //服务器对象，呈现页面的载体
    public NotificationManager manager;
    //通知兼容管理类
    public NotificationManagerCompat compat;
    //一个弹窗通知对象，后面会放到服务器对象中
    public Notification notification;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notification_tongzhi);
        /*这是服务器对象的特有实例化方式*/
        manager=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        /*这是兼容类特有的实例化方式*/
        compat=NotificationManagerCompat.from(this);

        //判断安卓版本,符合要求则创建实例
        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O)
        {
            /*创建一个通知内容对象:NotificationChannel
             *   内部参数格式为: id , 通知名 , 重要程度
             *       重要程度一般设置为最高级,弹出,并发出提示音,在状态栏中显示*/
            NotificationChannel tongzhi_window= new NotificationChannel("tongzhi_1","测试通知", NotificationManager.IMPORTANCE_HIGH);
            /*把通知对象放进系统服务中，此时的通知只有id和等级，没有内容*/
            manager.createNotificationChannel(tongzhi_window);
        }
        //获取权限,但各个版本获取权限的方式不同,因此使用启动获取的方式更为合理,此处仅做参考
        if(ContextCompat.checkSelfPermission(Notification_tongzhi.this, Manifest.permission.ACCESS_NOTIFICATION_POLICY)
                !=
                PackageManager.PERMISSION_GRANTED
        ){
            ActivityCompat.requestPermissions(Notification_tongzhi.this, new String[]{Manifest.permission.ACCESS_NOTIFICATION_POLICY}, 1);
        }

        //通过以下两条代码生成可跳转的通知
            /*在此处创建通知跳转意图Intent*/
            Intent intent=new Intent(this, Activity_lifecycle.class);
            /*将意图通过PendingIntent,关联到当前页面,
            *       注意:请不要将静态值用数量代替,SDK每年都在更新,不确定以后是否还是这个值*/
            PendingIntent pend=PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_IMMUTABLE);



        /*用NotificationCompat创建一个弹窗通知实例,
            上文已经已经创建“tongzhi_1”对象,通过id获得指定通知对象，并对它进行一系列设置
        *   以下为build式创建对象,以链式代码的方式.原理是其内部为 : return this;*/
        notification= new NotificationCompat.Builder(this,"tongzhi_1")
                /*词头*/
                .setContentTitle("官方通知:")
                /*通知内容*/
                .setContentText("消息发送成功!")
                /*通知图标,小图标*/
                .setSmallIcon(R.drawable.ic_baseline_airplanemode_active_24)
                /*通知图标,大图标*/
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.yqqs))
                /*设置小图标颜色*/
                .setColor(Color.parseColor("#ff0000"))
                /*设置点击跳转,内部参数为关联对象PendingIntent*/
                .setContentIntent(pend)
                /*开启点击通知后,关闭通知*/
                .setAutoCancel(true)
                /*结尾必须为build*/
                .build();

    }
    /*通过此方法,将已经锁定好内容的Notification实例弹出到屏幕上*/
    public void tongzhi_1(View v)
    {
        /*弹出同样要用到系统服务对象*/
        manager.notify(1,notification);
    }
    /*通过此方法,关闭通知*/
    public void qvxiao_tongzhi_1(View v)
    {
        /*注意,关闭的通知id,需要和弹出的通知id一样*/
        manager.cancel(1);
    }
    public void dibu_tongzhi_1(View v)
    {
        /*底部通知的设置很简单，只是现场生成临时通知窗体，并会在一段时间后自动注销*/
        Toast.makeText(Notification_tongzhi.this,"wifi已断开",Toast.LENGTH_SHORT).show();
    }
}
